package com.ruoyi.syf.handler.task;

import java.util.Date;

/**
 * 排查定时任务策略接口
 *
 * @author yr
 * @date 2024-07-31
 */
public interface TaskStrategy {

    /**
     * 获取定时任务策略类型
     */
    String getTaskType();

    /**
     * 转cron表达式
     *
     * @param num       时间数
     * @param timeUnit  时间单位
     * @param startTime 开始时间
     * @return cron表达式
     */
    String toCronExpression(int num, String timeUnit, Date startTime) throws IllegalAccessException;

    /**
     * 计算下一周期排查任务的开始时间
     *
     * @param date      本次排查任务的开始时间
     * @param startTime 任务开始时间(实际开始时间）
     * @param cycle     周期
     * @param cycleUnit 周期单位
     * @return 计算得出的时间
     */
    Date getNextBeginTime(Date date, Date startTime, Integer cycle, String cycleUnit) throws IllegalAccessException;

    /**
     * 计算上一周期排查任务的开始时间
     *
     * @param startTime 本次排查任务的开始时间
     * @param cycle     周期
     * @param cycleUnit 周期单位
     * @return 计算得出的时间
     */
    Date getLastBeginTime(Date startTime, Integer cycle, String cycleUnit) throws IllegalAccessException;

    /**
     * 计算离当前最近的一期定时任务执行时间
     *
     * @param startTime 开始时间
     * @param cycle     周期
     * @param cycleUnit 周期单位
     * @return 计算得出的时间
     */
    Date getRecentBeginTime(Date startTime, Integer cycle, String cycleUnit) throws IllegalAccessException;

}
